package com.qf.blog.core.exception;

import com.qf.blog.core.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

//@RestControllerAdvice
@ControllerAdvice
@Slf4j
//全局异常管理器
public class BlogExceptionHanlder {

    // 系统异常，Exception一行
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R systemException(Exception e) {
        log.error("系统异常", e);
        return R.error("系统正在维护，请联系管理员");
    }

    // 业务异常，BaseException包括子类
    @ExceptionHandler(BaseException.class)
    @ResponseBody
    public R baseException(BaseException e) {
        log.error(e.getMsg(), e);
        return R.error(e.getMsg());
    }

    // json异常
    @ExceptionHandler(JsonException.class) // 只有出现JsonException或者它的子类时就会调用这个方法
    @ResponseBody
    public R jsonException(JsonException e) {
        log.error("出现了json异常", e);
        return R.error(e.getMsg());
    }

    // view异常
    @ExceptionHandler(ViewException.class) // 调用这个方法的条件了
    public ModelAndView viewException(ViewException e) {
        log.error("出现视图异常", e);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("error.html");
        mv.addObject("msg", e.getMsg());
        return mv;
    }
}
